<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    
    <script>
        // ES5 精确判断数据类型
        //     var arr = [];
        //     var obj = {};
        //     var reg = /a/;
        //     var n = null;
        //     var u = undefined ;
        //     var b = true;
        //     var f = function(){}
        //   console.log(  Object.prototype.toString.call(arr))
        //   console.log(  Object.prototype.toString.call(obj))
        //   console.log(  Object.prototype.toString.call(reg))
        //   console.log(  Object.prototype.toString.call(n))
        //   console.log(  Object.prototype.toString.call(u))
        //   console.log(  Object.prototype.toString.call(b))
        //   console.log(  Object.prototype.toString.call(f))



    //    递归深拷贝
    //     var obj1 = {
    //         name: "张三",
    //         age: 20
    //     }

    //     console.log(obj1);
    //     var obj2 = obj1;
    //     var obj2 = {};

    //     for(var key in obj1){
    //        obj2[key] = obj1[key];
    //     }

    //     obj2.age = 40;

    //     console.log(obj1);


    //  简单版本的深拷贝函数
    //     var obj = {
    //         名字:"张三",
    //         年龄:20
    //     }
    //     console.log(obj.年龄);
    //     function deepCopy(obj1) {
    //         var obj2 = {};
    //         for (var key in obj1) {          
    //             obj2[key] = obj1[key];
    //         }
    //         return obj2;
    //     }

    //     var obj1 = {
    //         name: "张三",
    //         age: 20
    //     }

    //     var obj2 = deepCopy(obj1);
    //     obj2.age = 30;
    //     console.log(obj1);




     // 多层对象或者数组如何深拷贝 ？
     function deepCopy(obj1) {
            var obj2 = Object.prototype.toString.call(obj1) === "[object Array]" ? [] : {};
            for (var key in obj1) {
                if (obj1.hasOwnProperty(key)) {
                    if (typeof obj1[key] === "object") {
                       
                        obj2[key] = deepCopy(obj1[key]);
                    } else {
                        obj2[key] = obj1[key];
                    }
                }

            }
            return obj2;
        }

        Object.prototype.height = "178cm"; // 原始的对象上添加height属性
        var obj1 = {
            name: "张三",
            age: 20,
            hobby: {
                name1: "篮球",
                name2: "足球"
            }
        }
    </script>
</body>
</html>